
const path              = require('path');

const webpack           = require('webpack');
//这是 HtmlWebpackPlugin 模块引入文件
const HtmlWebpackPlugin = require('html-webpack-plugin'); 
const ExtractTextPlugin = require('extract-text-webpack-plugin');

// process.env 这是在我们执行scripts里的程序时要传入一个环境的变量

let  WEBPACK_ENV = process.env.WEBPACK_ENV || 'dev';


module.exports = {
   entry: './src/app.js',   //项目的入口文件路径
//    entry: './src/redux/index.js',
   output: {   //   这里是输出文件
    path: path.resolve(__dirname, 'dist'),
    publicPath: WEBPACK_ENV  ==='dev'? '/dist/': '//s.yinshang.top/dist/', //配置访问文件的路径
    filename: 'js/app.js'
    },

    devtool: 'inline-source-map',

    resolve:{
        alias:{
            page     : path.resolve(__dirname, 'src/page'),
            component: path.resolve(__dirname, 'src/component'),
            util     : path.resolve(__dirname, 'src/util'),
            servers  : path.resolve(__dirname, 'src/servers')
            
        }
    },
    module: {
        rules: [
            // react（jsx） 语法的处理
            {
                test: /\.js$/,    //打包js文件
                exclude: /(node_modules)/,  //排除 这里的文件不做打包
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['env', 'react']  //也可以用简写模式 env 这里有个坑 一定要用env 
                        //如果用   presets: ['@babel/preset-env'] 会报错 打包不成功
                        //env 有个好处 就是他会根据环境来打包
                        //然后 在添加个 react
                    }
                }
            },
            // css 文件的处理
            {
                test: /\.css$/,
                use: ExtractTextPlugin.extract({
                    fallback: "style-loader",
                    use: "css-loader"
                })
            },
            //scss 的文件处理
            {
                test: /\.scss$/,
                use: ExtractTextPlugin.extract({
                    fallback: 'style-loader',
                    use: ['css-loader', 'sass-loader']
                })
            },
            //图片的处理
            {
                test: /\.(png|jpg|gif)$/,
                use: [
                    {
                        loader: 'url-loader',
                        options: {
                            limit: 8192,
                            name:'resource/[name].[ext]'
                        }
                    }
                ]
            },
            //字体图标的处理
            {
                 test: /\.(woff|woff2|eot|ttf|otf|svg)$/,
                use: [
                    {
                        loader: 'url-loader',
                        options: {
                            limit: 8192, 
                            name:'resource/[name].[ext]'
                        }
                    }
                ]
            }
        ]
    },
     plugins: [  //这是plugins引入文件
        // 这是处理HTML文件
        new HtmlWebpackPlugin({
            template: './src/index.html' ,// 新建了一个模板 和模板的位置  
            favicon : './favicon.ico'  //处理 网站title旁边的图片的
        }),
        // 独立处理css文件
        new ExtractTextPlugin("css/[name].css"),
        // 提出公共模块
        new webpack.optimize.CommonsChunkPlugin({
            name : 'common',
            // 公共部分的js
            filename:'js/base.js'
        })
    ],
     devServer: {
         port:8086 ,  //修改启动的端口号
         historyApiFallback:{
             index:'/dist/index.html'
         },
         proxy : {
             '/manage' :{
                 target: 'http://admintest.happymmall.com',
                 changeOrigin : true
             },
             '/user/logout.do': {
                 target: 'http://admintest.happymmall.com',
                 changeOrigin: true
             }
         }
        }
};
